package com.totcy.atom.utils.glide;

import android.content.Context;
import android.support.annotation.DrawableRes;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.model.GlideUrl;
import com.bumptech.glide.load.model.LazyHeaders;
import com.bumptech.glide.load.resource.bitmap.CircleCrop;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import com.bumptech.glide.request.RequestOptions;
import com.totcy.atom.R;

/**
 * 具体参考博客 http://blog.csdn.net/u013005791/article/details/74532091
 * description: 图片加载
 *
 * @author: Totcy
 * date: 2017/11/30 18:34
 * update: 2017/11/30
 */

public class GlideUtil {
    private static RequestOptions optionsDefault = new RequestOptions()
            .placeholder(R.drawable.img_default)
            .error(R.drawable.img_default)
            //.diskCacheStrategy(DiskCacheStrategy.ALL) //默认缓存处理后的图片
            .centerCrop();

    /**
     * 加载图片
     *
     * @param mContext  activity对象
     * @param url       图片url、res、file
     * @param imageView 图片组件
     */
    public static void loadImage(Context mContext, Object url, ImageView imageView) {
        Object model;
        if(url instanceof String){
            GlideUrl glideUrl = new GlideUrl((String) url, new LazyHeaders.Builder()
                    .addHeader("Referer", "http://m.mm131.com/")
                    //.addHeader("Referrer-Policy", "no-referrer-when-downgrade")
                    .build());
            model = glideUrl;
        }else{
            model = url;
        }
        //设置图片并且去除换成防止下次加载显示上张图片禁用磁盘缓存
        Glide.with(mContext).load(model)
                //过渡动画
                .transition(DrawableTransitionOptions.withCrossFade())
                //V4 写法
                .apply(optionsDefault)
                .into(imageView);
    }

    /**
     * 加载图片/关闭过渡动画/
     *
     * @param mContext       activity对象
     * @param url            图片url、res、file
     * @param imageView      图片组件
     * @param usePlaceholder 使用占位图
     */
    public static void loadImage(Context mContext, Object url, ImageView imageView, boolean usePlaceholder) {
        //设置图片并且去除换成防止下次加载显示上张图片禁用磁盘缓存
        Glide.with(mContext).load(url)
                //过渡动画
                //.transition(DrawableTransitionOptions.withCrossFade())
                //V4 写法
                .apply(usePlaceholder
                        ? optionsDefault
                        : new RequestOptions().centerCrop())
                .into(imageView);
    }

    /**
     * 加载圆形图片
     *
     * @param mContext  activity对象
     * @param url       图片url、res、file
     * @param imageView 图片组件
     */
    public static void loadCircleImage(Context mContext, Object url, ImageView imageView) {
        //设置图片并且去除换成防止下次加载显示上张图片禁用磁盘缓存
        Glide.with(mContext).load(url)
                //过渡动画
                .transition(DrawableTransitionOptions.withCrossFade())
                //V4 写法
                .apply(new RequestOptions()
                        .placeholder(R.drawable.img_default)
                        .error(R.drawable.img_default)
                        .transform(new CircleCrop()))
                .into(imageView);
    }

    /**
     * 加载圆角图片
     *
     * @param mContext  activity对象
     * @param url       图片url、res、file
     * @param imageView 图片组件
     */
    public static void loadRoundedImage(Context mContext, Object url, ImageView imageView, int roundingRadius) {
        //设置图片并且去除换成防止下次加载显示上张图片禁用磁盘缓存
        Glide.with(mContext).load(url)
                //过渡动画
                .transition(DrawableTransitionOptions.withCrossFade())
                //V4 写法
                .apply(new RequestOptions()
                        .placeholder(R.drawable.img_default)
                        .error(R.drawable.img_default)
                        .transform(new RoundedCorners(roundingRadius)))
                .into(imageView);
    }

    /**
     * 加载图片,传入占位图
     *
     * @param mContext  activity对象
     * @param url       图片url、res、file
     * @param imageView 图片组件
     */
    public static void loadImage(Context mContext, Object url, ImageView imageView, @DrawableRes int errorRes) {
        //设置图片并且去除换成防止下次加载显示上张图片禁用磁盘缓存
        Glide.with(mContext).load(url)
                //过渡动画
                .transition(DrawableTransitionOptions.withCrossFade())
                //V4 写法
                .apply(new RequestOptions()
                        .placeholder(errorRes)
                        .error(errorRes)
                        .centerCrop())
                .into(imageView);
    }
    /**
     * 加载图片,传入错误占位图
     *
     * @param mContext  activity对象
     * @param url       图片url、res、file
     * @param imageView 图片组件
     */
    public static void loadImageNoPlaceholder(Context mContext, Object url, ImageView imageView, @DrawableRes int errorRes) {
        //设置图片并且去除换成防止下次加载显示上张图片禁用磁盘缓存
        Glide.with(mContext).load(url)
                //过渡动画
                .transition(DrawableTransitionOptions.withCrossFade())
                //V4 写法
                .apply(new RequestOptions()
                        .error(errorRes)
                        .centerCrop())
                .into(imageView);
    }
    /**
     * 加载图片,传入错误占位图
     *
     * @param mContext  activity对象
     * @param url       图片url、res、file
     * @param imageView 图片组件
     */
    public static void loadImageNoPlaceholder(Context mContext, Object url, ImageView imageView, boolean centerInside, @DrawableRes int errorRes) {
        RequestOptions options = new RequestOptions()
                .error(errorRes);
        options = centerInside ? options.centerInside() : options.centerCrop();

        Glide.with(mContext).load(url)
                //过渡动画
                .transition(DrawableTransitionOptions.withCrossFade())
                //V4 写法
                .apply(options)
                .into(imageView);
    }

    /**
     * 加载图片/ 传入占位图/ fitCenter or  centerCrop
     *
     * @param mContext  activity对象
     * @param url       图片url、res、file
     * @param imageView 图片组件
     */
    public static void loadImage(Context mContext, Object url, ImageView imageView, boolean fitCenter, @DrawableRes int errorRes) {
        RequestOptions options = new RequestOptions()
                .placeholder(errorRes)
                .error(errorRes);
        options = fitCenter ? options.fitCenter() : options.centerCrop();

        //设置图片并且去除换成防止下次加载显示上张图片禁用磁盘缓存
        Glide.with(mContext).load(url)
                //过渡动画
                .transition(DrawableTransitionOptions.withCrossFade())
                //V4 写法
                .apply(options)
                .into(imageView);
    }
}
